<?php
include_once "Controller.class.php";
include_once "../classes/services/RelatorioService.class.php";
include_once "../classes/controller/GrupoRelatoriosController.class.php";

class RelatorioController extends Controller {
	
	/* Detalhar um relatorio */
	public function detalharRelatorio() {
		$status = false;
		$tipo = parent::getParametroRequest(RequestConstants::TIPO_RELATORIO);
		$listaRelatorios;
		
		switch ($tipo) {
			case SessionConstants::TIPO_RELATORIO_MODELOS :
				$listaRelatorios = parent::getParametroSession(SessionConstants::RELATORIOS_MODELO);
				break;
			case SessionConstants::TIPO_MAIS_VISUALIZADOS :
				$listaRelatorios = parent::getParametroSession(SessionConstants::RELATORIOS_MAIS_VISUALIZADOS);
				break;	
			case SessionConstants::TIPO_RELATORIOS_SALVOS :
				$salvos = new GrupoRelatoriosController();
				$salvos->pesquisarRelatoriosSalvos();
				$listaRelatorios = parent::getParametroSession(SessionConstants::RELATORIOS_SALVOS);
				break;
			default:
				$msg = MensagensConstants::TIPO_NAO_EXISTE;
				parent::persistirMensagem($msg);
				break;
		}

		if (isset($msg)) {
			return;
		}
		
		$id = parent::getParametroRequest(RequestConstants::ID_RELATORIO);
		$relDetalhe;
		if (isset($listaRelatorios)) {
			foreach ($listaRelatorios as $relatorio) {
				$idRel = $relatorio->getId();
				if ($idRel == $id) {
					$relDetalhe = $relatorio;
					$msg = "";
					break;
				}
				$msg = MensagensConstants::RELATORIO_NAO_ENCONTRADO;
			}
		} else {
			$msg = MensagensConstants::RELATORIO_NAO_ENCONTRADO;
		}
		
		if (isset($msg) && $msg != RequestConstants::VAZIO) {
			parent::persistirMensagem($msg);
		} else {
			$service = new RelatorioService();
			$status = $service->detalhesRelatorio($relDetalhe);
			
			if ($status) {
				session_register(SessionConstants::RELATORIO);
				parent::persistirObjeto(SessionConstants::RELATORIO,$service->getRelatorioDetalhado());
				$status = true;
			} else {
				parent::persistirMensagem($service->getMensagem());
			}
		}
		return $status;
	}
	
	/* Visualizar o relat�rio */
	public function visualizarRelatorio() {
		$relatorio = parent::getParametroSession(SessionConstants::RELATORIO);
		$service = new RelatorioService();
		
		$status = $service->visualizarRelatorio($relatorio);
		
		if ($status) {
			parent::persistirMensagem(RequestConstants::VAZIO);
			session_register(SessionConstants::RESULTADOS);
			parent::persistirObjeto(SessionConstants::RESULTADOS,$service->getResultado());
			return true;
		} else {
			parent::persistirMensagem($service->getMensagem());
			return false;
		}
	}
	
	public function recuperaRequesCriarRelatorio() {
		$relatorio = parent::getParametroSession(SessionConstants::RELATORIO);
		
		if($_POST) {
	
			
		}
	
		if (isset($_POST["nome"])) {
			echo "Usuário ou senha incorreto.";
		}
			
		session_register(SessionConstants::RELATORIOS_MODELO);
		parent::persistirObjeto(SessionConstants::RELATORIOS_MODELO,$modelos);
	}
	
	/**
	 * Salvar Relatório
	 *
	 * @param String $acao
	 * @param String $nomeRelatorio
	 * @param String $campoPg
	 * @param String $campoLn
	 * @param Array $arrayDados
	 * @param Array $listaFiltros
	 * @return String $relatorioID
	 */
	public function salvarRelatorio ($acao, $nomeRelatorio, $campoPg, $campoLn, $arrayDados, $arrayFiltros) {
		
		//Monta campo de dados numa única string
		$campoDd = null;
		for ($i=0;$i<count($arrayDados);$i++){
			if ($i != 0){
				$campoDd = $campoDd.';'.$arrayDados[$i];
			} else {
				$campoDd = $arrayDados[$i];
			}
		}
		//Monta os filtros numa única string
		$filtros = null;
		for ($i=0;$i<count($arrayFiltros);$i++){
			if ($i != 0){
				$filtros = $filtros.';'.$arrayFiltros[$i];
			} else {
				$filtros = $arrayFiltros[$i];
			}
		}
		
		$usuario = Controller::getUsuario();
		//Cria objeto relatorio
		$relatorio = new Relatorio();
		$relatorio->setNome($nomeRelatorio);
		$relatorio->setCampoPagina($campoPg);
		$relatorio->setCampoLinha($campoLn);
		$relatorio->setCamposDados($campoDd);
		$relatorio->setFiltros($filtros);
		$relatorio->setUsuarioLogin($usuario->getNome());
		
		$service = new RelatorioService();
		//Insere Relatório e retorna o número do ID
		$relatorioID = $service->salvarRelatorio($acao, $relatorio);
		
		$relatorio->setId($relatorioID);
				
		parent::persistirObjeto(SessionConstants::RELATORIO, $relatorio);		
		
		return $relatorioID;
		
	}
	
	/* Executa a acao do relatorio */
	public function acaoRelatorio() {
		$acao = parent::getParametroRequest(RequestConstants::ACAO);
		$id = parent::getParametroRequest(RequestConstants::ID_RELATORIO);
		
		$service = new RelatorioService();
		
		$status = $service->acaoRelatorio($acao,$id, $this);
		if ($status) {
			if ($acao == "importar") {			
				parent::persistirMensagem(MensagensConstants::RELATORIO_IMPORTADO);
			} else if ($acao == "remover") {
				parent::persistirMensagem(MensagensConstants::RELATORIO_REMOVIDO);
			}
		} else {
			parent::persistirMensagem(MensagensConstants::ACAO_INVALIDA);
		}
	}	

	public function gerarRelatorioExcel() {
		$service = new RelatorioService();
		//Gera dados para popula o excel
		$monitoramento = null;
		$monitoramento = $service->geraRelatorioExcel(Controller::getQueryParaExcel());
		return $monitoramento;
	}
}
?>